]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
[StBoxLayout] Add st_box_layout_remove_all, st_box_layout_destroy_children
authorColin Walters <walters@verbum.org>
Tue, 10 Nov 2009 19:25:41 +0000 (14:25 -0500)
committerColin Walters <walters@verbum.org>
Thu, 12 Nov 2009 16:42:00 +0000 (11:42 -0500)
In a variety of places we're using boxes as data-modeling displays,
and in doing so we often want to either remove the children or
explictly destroy them.

Now ideally Gjs would support callbacks, and this would make using
the for_each functions possible, but even then these functions
are more efficient and shorter to type, at least.

https://bugzilla.gnome.org/show_bug.cgi?id=600734

src/st/st-box-layout.c
src/st/st-box-layout.h

index 12b15081ab9d6c960ae0f4ae603ca4a3502f9e6d..d0371d821bacdccbb06f6519064ca6cf088a09fb 100644 (file)
@@ -1338,3 +1338,50 @@ st_box_layout_get_pack_start (StBoxLayout *box)
 
   return box->priv->is_pack_start;
 }
+
+static void
+st_box_layout_internal_remove_all (StBoxLayout *self,
+                                   gboolean     destroy)
+{
+  StBoxLayoutPrivate *priv = ST_BOX_LAYOUT (self)->priv;
+  ClutterActor *child;
+
+  while (priv->children)
+    {
+      child = priv->children->data;
+
+      g_object_ref (child);
+      priv->children = g_list_delete_link (priv->children, priv->children);
+      clutter_actor_unparent (child);
+      g_signal_emit_by_name (self, "actor-removed", child);
+      if (destroy)
+        clutter_actor_destroy (child);
+      g_object_unref (child);
+    }
+
+  clutter_actor_queue_relayout ((ClutterActor*) self);
+}
+
+/**
+ * st_box_layout_remove_all:
+ * @self:
+ *
+ * Efficiently unparent all children currently in this box.
+ */
+void
+st_box_layout_remove_all (StBoxLayout *self)
+{
+  st_box_layout_internal_remove_all (self, FALSE);
+}
+
+/**
+ * st_box_layout_destroy_children:
+ * @self:
+ *
+ * Efficiently unparent and destroy all children currently in this box.
+ */
+void
+st_box_layout_destroy_children (StBoxLayout *self)
+{
+  st_box_layout_internal_remove_all (self, TRUE);
+}
index 30954a2eee5a369e1d9ba01e6638a3fb034f8bc7..b57143ba44c2330f25c98e51a9d94af4e61a5a53 100644 (file)
@@ -89,6 +89,10 @@ void     st_box_layout_set_pack_start (StBoxLayout *box,
                                        gboolean     pack_start);
 gboolean st_box_layout_get_pack_start (StBoxLayout *box);
 
+void     st_box_layout_remove_all     (StBoxLayout *box);
+
+void     st_box_layout_destroy_children (StBoxLayout *box);
+
 G_END_DECLS
 
 #endif /* _ST_BOX_LAYOUT_H */